"""
基于excel文件的内容去进行读取，并结合获取的数据进行自动化测试
"""

import openpyxl
from openpyxl.styles import Font
from public.common.keys_words import Keys_words


def read(file):
    # 读取数据
    excel = openpyxl.load_workbook(file)
    excel2 = openpyxl.load_workbook('D:/liulong/ExcelKeywordDriverTest/data/login_data.xlsx')
    for s_name in excel2.sheetnames:
        sheet_name = excel2[s_name]
        # print(sheet_name)
        for value in sheet_name.values:
            print(value)
    # 获取到所有工作薄
    for name in excel.sheetnames:
        sheet = excel[name]  # 工作表名
        # print(sheet)
        # 获取到所有的数据，以元组的方式打印出来
        for values in sheet.values:
            # 打印表格的所有的内容
            # print(values)
            # print(values[1])    # 一列单元格内容

            # 判断打印元组集合中第一个单元格是Int类型的数据
            if type(values[0]) is int:
                # print(values)
                data = {}
                data['name'] = values[2]  # 定位方式
                data["value"] = values[3]  # 元素值
                data["txt"] = values[4]  # 输入值
                data["expect"] = values[6]  # 预期结果
                # print(f'data值={data}')
                # data变成字典
                # print(data.keys())    # 取字典的键
                # 判断每个键里面的值是否为 None 如果是则删除此键
                for key in list(data.keys()):
                    if data[key] == None:
                        del data[key]
                # print(data)

                # 基于操作行为和对应的参数来执行自动化操作，
                # 用例的操作主要分为两种：
                #     1.实例化，通过一个操作行为实例化关键字驱动类对象
                #     2.常规操作，通过调用已实例化的对象，执行对应的函数
                #     3.断言操作，判断预期结果与实际结果是否一致，将结果填入测试用例中
                # 判断是否是实例化操
                # values[1]表示数据里面的第二列
                # print(values[1])
                if values[1] == "open_browser":
                    # *data 一个星号表示取键
                    # **data 表示实现字典的解包
                    # Keys = Keys(txt=Chrome)
                    keys = Keys_words(**data)
                    # print(keys)


# read('D:/liulong/ExcelKeywordDriverTest/data/test_login.xlsx')

# 断言,断言有很多中，这里只是一种
                elif 'assert' in values[1]:
                    #
                    status = getattr(keys, values[1])(**data)
                    #     判断结果
                    if status:
                        sheet.cell(row=values[0] + 2, column=8).value = "pass"
                        sheet.cell(row=values[0] + 2, column=8)
                    else:
                        sheet.cell(row=values[0] + 2, column=8).value = "fail"
                        sheet.cell(row=values[0] + 2, column=8)
                    excel.save(file)
                # 如果不是则变成常规操作
                else:
                    # getattr返回对象属性值
                    getattr(keys, values[1])(**data)
